// 购物车相关
export default{
	// 开启命名空间
	namespaced:true,
	// 模块的state数据
	state:()=>({
		// 购物车数组
		// { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }
		// 读取本地存储的购物车数据，对cart数组初始化
		cart:JSON.parse(uni.getStorageSync('cart')||'[]')
	}),
	// mutations方法
	mutations:{
		// 商品信息加入购物车
		addToCart(state,goods){
			console.log(state)
			console.log(goods)
			// 根据提交的商品id查询购物车中是否存在这件商品
			const findResult=state.cart.find((x)=>x.goods_id === goods.goods_id) 
			if(!findResult){
				// 没有商品直接push
				state.cart.push(goods)
			}else{
				// 有商品则数量更新
				findResult.goods_count++
			}
			// 通过commit方法调用saveToStorage方法
			this.commit('m_cart/saveToStorage')
		},
		
		// 将购物车数据持久化保存至本地
		saveToStorage(state){
			uni.setStorageSync('cart',JSON.stringify(state.cart))
		},
		
		// 更新购物车商品勾选状态
		updateGoodsState(state,goods){
			const findResult=state.cart.find(x=>x.goods_id === goods.goods_id)
			if(findResult){
				// 更新勾选状态
				findResult.goods_state=goods.goods_state
				// 持久化存储至本地
				this.commit('m_cart/saveToStorage')
			}
		},
		
		// 更新购物车商品数量
		updateGoodsCount(state,goods){
			const findResult=state.cart.find(x=>x.goods_id === goods.goods_id)
			
			if(findResult){
				// 更新对应商品的数量
				findResult.goods_count=goods.goods_count
				//持久化存储至本地
				this.commit('m_cart/saveToStorage')
			}
		},
		
		// 滑动删除功能
		removeGoodsById(state,goods_id){
			// 调用数组的filter方法进行过滤
			state.cart=state.cart.filter(x=>x.goods_id !==goods_id)
			// 持久化存储至本地
			this.commit('m_cart/saveToStorage')
		},
		
		// 更新所有商品的勾选状态
		updateAllGoodsState(state,newState){
			// 循环更新购物车商品的勾选状态
			state.cart.forEach(x=>x.goods_state=newState)
			this.commit('m_cart/saveToStorage')
		}
	},
	// getters属性
	getters:{
		// 统计购物车中商品的总数量
		// 页面首次加载完毕后不会调用这个侦听器
		total(state){
			let c=0
			// 循环统计商品的数量
			state.cart.forEach(goods=>c+=goods.goods_count)
			return c
		},
		// 已勾选商品总数量
		checkedCount(state){
			/* 
			先使用filter方法，从购物车中过滤已勾选的商品 
			再使用reduce方法，将已勾选的商品总数量进行累加
			*/ 
		   return state.cart.filter(x=>x.goods_state).reduce((total,item)=>total+=item.goods_count,0)
		},
		// 已勾选商品总价
		checkedGoodsAmount(state){
			return state.cart.filter(x=>x.goods_state)
							.reduce((total,item)=>total+=item.goods_count*item.goods_price,0)
							.toFixed(2)
		}
	},
}